package com.itheima.service.impl;

import com.itheima.dao.UserDao;
import com.itheima.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Service;

/**
 * TODO:属性注入
 * <p>
 * 1、@Value
 * 属性类型为8大基本类型和String
 * （不需要set方法，无需关心类型转换）
 * <p>
 * 2、@Autowired （自动装配）
 *  1）适用于除String以外其他引用类型
 *  2）自动装配是指自动从ioc容器中获取bean
 *      i）如果ioc容器中有且仅有唯一的当前类型的对象，会自动装配
 *      ii）如果ioc容器中有多个当前类型对象，会自动配置变量名和标识一致的bean
 *      iii）如果ioc容器中有多个当前类型对象，且跟变量名都不一致，需要手动设置@Qualifier("userDao2")
 * <p>
 *   TODO:加载properties文件
 * </p>
 * 1、@PropertySource("classpath:jdbc.properties")
 * 2、spring el表达式
 *      ${}：引入外部文件的变量
 *      注意：表达式写到Spring组件以外的类上没有效果的，没解析
 */
@Service("userService")
@PropertySource("classpath:jdbc.properties")
public class UserServiceImpl implements UserService {
    @Value("${jdbc.url}")
    private String url;

    @Value("${jdbc.driver}")
    private String driver;

    @Autowired
    @Qualifier("userDao2")
    private UserDao dao;

    @Value("8089")
    private Integer port;

    @Override
    public void save() {
        System.out.println("UserServiceImpl run...");
        System.out.println(url);
        System.out.println(driver);
        dao.save();
        System.out.println(port);
    }

//    public void setUrl(String url) {
//        this.url = url;
//    }
//
//    public void setDriver(String driver) {
//        this.driver = driver;
//    }
//
//    public void setDao(UserDao dao) {
//        this.dao = dao;
//    }
}
